package com.gzx.plugin.tjzy.modular.project.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzx.plugin.tjzy.core.entity.CustomVo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectBo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectIdBo;
import com.gzx.plugin.tjzy.modular.project.entity.bo.GzxProjectQueryBo;
import com.gzx.plugin.tjzy.modular.project.entity.vo.GzxProjectVo;
import com.gzx.plugin.tjzy.modular.project.service.GzxProjectService;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import vip.xiaonuo.common.annotation.CommonLog;
import vip.xiaonuo.common.pojo.CommonResult;

import java.util.List;

/**
 * 委托公司产品项目
 * 前端访问路由地址为:/tjzy/project
 *
 * @author LionLi
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/tjzy/project")
public class GzxProjectController {

    private final GzxProjectService gzxProjectService;

    /**
     * 查询委托公司产品项目列表
     */
    @PostMapping("/pageList")
    public CommonResult<Page<GzxProjectVo>> pageList(@RequestBody GzxProjectQueryBo bo) {
        return CommonResult.data(gzxProjectService.pageList(bo));
    }

    /**
     * 获取委托公司产品项目详细信息
     *
     * @param id 主键
     */
    @GetMapping("/{id}")
    public CommonResult<GzxProjectVo> getInfo(@NotNull(message = "主键不能为空")
                                   @PathVariable Long id) {
        return CommonResult.data(gzxProjectService.queryById(id));
    }

    /**
     * 查询所有产品
     */
    @GetMapping("/listAll")
    public CommonResult<List<CustomVo>> listAll(@RequestParam boolean flag, @RequestParam String val) {
        return CommonResult.data(gzxProjectService.listAll(flag, val));
    }

    /**
     * 新增委托公司产品项目
     * FIXME： 主表添加belong*字段
     */
    @CommonLog("新增委托公司产品项目")
    @PostMapping("/add")
    public CommonResult<Void> add(@RequestBody GzxProjectBo bo) {
        gzxProjectService.insertByBo(bo);
        return CommonResult.ok();
    }

    /**
     * 修改委托公司产品项目
     */
    @CommonLog("修改委托公司产品项目")
    @PostMapping("/edit")
    public CommonResult<Void> edit(@RequestBody GzxProjectBo bo) {
        gzxProjectService.updateByBo(bo);
        return CommonResult.ok();
    }

    /**
     * 删除委托公司产品项目
     */
    @CommonLog("删除委托公司产品项目")
    @PostMapping("/del")
    public CommonResult<Void> remove(@RequestBody GzxProjectIdBo projectIdBo) {
        gzxProjectService.deleteWithValidByIds(projectIdBo);
        return CommonResult.ok();
    }
}
